package control;

import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.service.ProjectService;
import model.service.RiskIService;
import model.vo.MakindVO;
import model.vo.MemberVO;
import model.vo.MplistVO;

import org.json.simple.JSONObject;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class ProjectController extends MultiActionController {
	//보낼 액션 이름
	private String actionName="projectAction.do";
	private ProjectService projectService;
	public void setProjectService(ProjectService projectService) {
		this.projectService = projectService;
	}
	private RiskIService riskIService;
	public void setRiskIService(RiskIService riskIService) {
		this.riskIService = riskIService;
	}
	//[프로젝트 적용]
	//프로젝트 관리 페이지
	public ModelAndView projectApply(HttpServletRequest request,HttpServletResponse response) throws Exception{
		response.setContentType("text/html;charset=UTF-8");
		response.setHeader("Cache-Control", "no-cache");
		ModelAndView mv=new ModelAndView();
		//결과를 리스트에 담음
		//List list=projectService.mplist();
		//리스트라는 객체에 list를 담아 보넴(request.setAttribute와 동일)
		//mv.addObject("list",list);
		//페이지 이동(tiles_definition.xml에서 assetBase를 읽어 다른곳으로 이동
		HttpSession session = request.getSession(false);
		int pro_id=Integer.parseInt(request.getParameter("pro_id")); 
		String pro_nm=request.getParameter("pro_nm");
		String proDayIndex=request.getParameter("proDayIndex");
		System.out.println(pro_nm);
		//List mplist=projectService.mplist();
		session.setAttribute("proNm", pro_nm);
		session.setAttribute("proDayIndex", proDayIndex);
		session.setAttribute("lastProId", pro_id);
		//처음 들어왔을시
		//if(session.getAttribute("magamSession")==null)
		session.setAttribute("magamSession",projectService.proSelectCount(pro_id));
		
		session.setMaxInactiveInterval(20*60);
		List list=projectService.proSelectCount(pro_id);
		System.out.println(list);
		mv.addObject("list",list);
		mv.setViewName("sms_main");
		return mv;
	}
	
	
	
	
	
	
	
	
	
	
	//[프로젝트 관리]
	//프로젝트 관리 페이지
	public ModelAndView mplist(HttpServletRequest request,HttpServletResponse response) throws Exception{
		ModelAndView mv=new ModelAndView();
		HttpSession session = request.getSession(false);
		
		String pro_loginID="";
		if(session!=null && session.getAttribute("USER_ID")!=null){
			//MemberVO mvo = (MemberVO) session.getAttribute("mvo");
			String USER_ID=(String) session.getAttribute("USER_ID");
			pro_loginID=USER_ID;
		}
		
		//결과를 리스트에 담음
		List list=projectService.mplist(pro_loginID);
		//리스트라는 객체에 list를 담아 보넴(request.setAttribute와 동일)
		mv.addObject("list",list);
		//페이지 이동(tiles_definition.xml에서 assetBase를 읽어 다른곳으로 이동
		mv.setViewName("mplist_SL");
		return mv;
	}
	//프로젝트 관리 등록 페이지
	public ModelAndView mplist_insertPage(HttpServletRequest request,HttpServletResponse response) throws Exception{
		ModelAndView mv=new ModelAndView();
		//최대 순번 구해오기
		int maxNo=projectService.maxNo("mplist_maxNo");
		//순번 객체 담기
		mv.addObject("maxNo",maxNo);
		//페이지 이동
		mv.setViewName("mplist_SI");
		return mv;
	}
	
	//AJAX 착수일의 iap버전 생성
	public void autoPro_pindex(HttpServletRequest request,HttpServletResponse response) throws Exception{
		//자산코드의 값을 euc-kr로 인코딩하여 받음
		//String a_cd= new String(request.getParameter("a_cd").getBytes("8859_1"),"euc-kr");
		//String a_cd= request.getParameter("a_cd");
		response.setContentType("text/html;charset=UTF-8");
		response.setHeader("Cache-Control", "no-cache");
		String pro_sday= request.getParameter("pro_sday");
		MplistVO vo=projectService.mplist_updatePage(request.getParameter("pro_id"));
		int autoPro_pindex=0;
		if(vo!=null){
			if(vo.getPro_sday().equals(pro_sday)){
				autoPro_pindex=vo.getPro_pindex();
			}else{
				autoPro_pindex=projectService.autoPro_pindex(pro_sday);
			}
		}else{
			autoPro_pindex=projectService.autoPro_pindex(pro_sday);
		}
		JSONObject obj=new JSONObject();
		obj.put("autoPro_pindex", autoPro_pindex);
		PrintWriter out = response.getWriter();
		out.print(obj.toString());
	}	
	//AJAX 착수일의 iap버전 검색 
	public void identity_pro_pindex(HttpServletRequest request,HttpServletResponse response) throws Exception{
		//자산코드의 값을 euc-kr로 인코딩하여 받음
		//String a_cd= new String(request.getParameter("a_cd").getBytes("8859_1"),"euc-kr");
		//String a_cd= request.getParameter("a_cd");
		response.setContentType("text/html;charset=UTF-8");
		response.setHeader("Cache-Control", "no-cache");
		String pro_sday= request.getParameter("pro_sday");
		String pro_pindex= request.getParameter("pro_pindex");
		MplistVO vo=projectService.mplist_updatePage(request.getParameter("pro_id"));
		String update=request.getParameter("update");
		JSONObject obj=new JSONObject();
		boolean pro_pindexFlag = projectService.identity_pro_pindex(pro_sday,pro_pindex);
			if(pro_pindexFlag){
				//중복
				//만약 수정 페이지 였다면
				if(update.equals("Y")){
					//만약 기존 vo값(수정페이지 값과) 넘어온 값이 같다면
					if(vo.getPro_sday().equals(pro_sday) && vo.getPro_pindex()==Integer.parseInt(pro_pindex)){
						obj.put("pro_pindexFlag", "Y");
					}else{
						obj.put("pro_pindexFlag", "N");
					}
				}else{
					obj.put("pro_pindexFlag", "N");
				}
			}else{
				//사용가능
				obj.put("pro_pindexFlag", "Y");
			}
		//obj.put("autoPro_pindex", autoPro_pindex);
		PrintWriter out = response.getWriter();
		out.print(obj.toString());
	}	
	
	
	
	//프로젝트 관리 등록
	public ModelAndView mplist_insert(HttpServletRequest request,HttpServletResponse response) throws Exception{
		ModelAndView mv=new ModelAndView();
		MplistVO vo=new MplistVO();
		//vo에 request값들은 담음
		bind(request, vo);
		System.out.println("자산 분류 기준 request값: "+vo);
		HttpSession session = request.getSession(false);
		
		try{
			//등록
			projectService.mplist_insert(vo);
			/*
			//프로젝트 정보 저장
			MplistVO pvo=null;
			int pro_id=0;
			List mplist=projectService.mplist();
			if(session!=null){
				session.setAttribute("mplist", mplist);
				session.setMaxInactiveInterval(20*60);
			}
			//System.out.println(mplist.size());
			//프로젝트 회차가 없지 않으면
			if(mplist.size()!=0){
				//pvo에 마지막 회차정보를 저장
				pvo=(MplistVO) mplist.get(mplist.size()-1);
				pro_id=pvo.getPro_id();
			}
			//pvo를 세션에 저장(값이 없으면 null, 있으면 마지막 회차 정보)
				session.setAttribute("lastProId", pro_id);
				*/
			//등록후 list 페이지로 이동
			mv.addObject("actionName",actionName);
			mv.addObject("pageName","mplist");
			mv.setViewName("insertAndDeleteResult");
		}catch (SQLException e) {//SQL에러시
			System.out.println(e.getMessage());
			mv.setViewName("failResult");
		}
		return mv;
	}
	//프로젝트 관리  삭제
	public ModelAndView mplist_delete(HttpServletRequest request,HttpServletResponse response) throws Exception{
		ModelAndView mv=new ModelAndView();
		String proId[]=request.getParameterValues("check");
		//체크 박스로 삭제
		if(proId!=null){
			//체크된 것들의 value값을 받음
			for(int i=0;i<proId.length;i++){
				System.out.println(proId[i]);
				//삭제
				//int asset_no=Integer.parseInt(assetNo[i]); //서비스단에서 인트로 바꿔줌 
				projectService.mplist_delete(proId[i]);
			}
		}
		HttpSession session = request.getSession(false);
		//프로젝트 정보 저장
		MplistVO pvo=null;
		int pro_id=0;
		String pro_nm="";
		String proDayIndex="";
		//List mplist=projectService.mplist();
		/*
		if(session!=null){
			session.setAttribute("mplist", mplist);
			session.setMaxInactiveInterval(20*60);
		}
		//System.out.println(mplist.size());
		//프로젝트 회차가 없지 않으면
		if(mplist.size()!=0){
			//pvo에 마지막 회차정보를 저장
			pvo=(MplistVO) mplist.get(mplist.size()-1);
			pro_id=pvo.getPro_id();
		}
		*/
		
		//pvo를 세션에 저장(값이 없으면 null, 있으면 마지막 회차 정보)
			//session.setAttribute("proNm", pro_nm);
			//session.setAttribute("proDayIndex", proDayIndex);
			//session.setAttribute("lastProId", pro_id);
			//session.setMaxInactiveInterval(20*60);
		session.removeAttribute("proNm"); 
		session.removeAttribute("proDayIndex"); 
		session.removeAttribute("lastProId"); 
		session.removeAttribute("magamSession"); 
		
		//삭제후 list 페이지로 이동
		mv.addObject("actionName",actionName);
		mv.addObject("pageName","mplist");
		mv.setViewName("insertAndDeleteResult");
		return mv;
	}
	
	//프로젝트 관리  수정 페이지로 이동
	public ModelAndView mplist_updatePage(HttpServletRequest request,HttpServletResponse response) throws Exception{
		ModelAndView mv=new ModelAndView();
		//int asset_no=Integer.parseInt(request.getParameter("asset_no")); //서비스단에서 인트로 바꿔줌 
		MplistVO vo=projectService.mplist_updatePage(request.getParameter("pro_id"));
		System.out.println(vo);
		mv.addObject("update","Y");
		mv.addObject("vo",vo);
		mv.setViewName("mplist_SI");
		return mv;
	}
	//프로젝트 관리  수정 
	public ModelAndView mplist_update(HttpServletRequest request,HttpServletResponse response) throws Exception{
		ModelAndView mv=new ModelAndView();
		MplistVO vo=new MplistVO();
		//vo에 request값들은 담음
		bind(request, vo);
		System.out.println("자산 분류 기준 수정값 request값들: "+vo);
		projectService.mplist_update(vo);
		/*
		HttpSession session = request.getSession(false);
		//프로젝트 정보 저장
		MplistVO pvo=null;
		int pro_id=0;
		List mplist=projectService.mplist();
		if(session!=null){
			session.setAttribute("mplist", mplist);
			session.setMaxInactiveInterval(20*60);
		}
		//System.out.println(mplist.size());
		//프로젝트 회차가 없지 않으면
		if(mplist.size()!=0){
			//pvo에 마지막 회차정보를 저장
			pvo=(MplistVO) mplist.get(mplist.size()-1);
			pro_id=pvo.getPro_id();
		}
		*/
		mv.addObject("actionName",actionName);
		mv.addObject("pageName","mplist");
		mv.setViewName("insertAndDeleteResult");
		return mv;
	}
	
	//AJAX 회차정보 세션저장
	public void saveProId(HttpServletRequest request,HttpServletResponse response) throws Exception{
		//자산코드의 값을 euc-kr로 인코딩하여 받음
		//String a_cd= new String(request.getParameter("a_cd").getBytes("8859_1"),"euc-kr");
		//String a_cd= request.getParameter("a_cd");
		response.setContentType("text/html;charset=UTF-8");
		response.setHeader("Cache-Control", "no-cache");
		int proId= Integer.parseInt(request.getParameter("proId"));
		JSONObject obj=new JSONObject();
		HttpSession session = request.getSession(false);
		if(session!=null && session.getAttribute("USER_ID")!=null){
			session.setAttribute("lastProId", proId);
			session.setMaxInactiveInterval(-1);
		}
		PrintWriter out = response.getWriter();
		out.print(obj.toString());
	}	
	
	
	//복사 생성 (프로젝트 카피)
	public ModelAndView copyProject(HttpServletRequest request,HttpServletResponse response) throws Exception{
		ModelAndView mv=new ModelAndView();
		

		HttpSession session = request.getSession(false);
		String pro_loginID="";
		if(session!=null && session.getAttribute("USER_ID")!=null){
			//MemberVO mvo = (MemberVO) session.getAttribute("mvo");
			String USER_ID=(String) session.getAttribute("USER_ID");
			pro_loginID=USER_ID;
		}
		
		
		//결과를 리스트에 담음
		List list=projectService.mplist(pro_loginID);
		//리스트라는 객체에 list를 담아 보넴(request.setAttribute와 동일)
		mv.addObject("list",list);
		mv.setViewName("mplist_SC");
		return mv;
	}
	
	
	//복사생성(등록)
	//위험처리방안선정  삭제
	public ModelAndView mplist_SC_insert(HttpServletRequest request,HttpServletResponse response) throws Exception{
		ModelAndView mv=new ModelAndView();
		//String chkValue[]=request.getParameterValues("check");
		int pro_id=Integer.parseInt(request.getParameter("pro_id"));
		String pro_loginID=request.getParameter("pro_loginID");
		System.out.println(pro_id);
		HashMap map=new HashMap();
		//체크 박스로 삭제
		//if(chkValue!=null){
			//체크된 것들의 value값을 받음
			//for(int i=0;i<chkValue.length;i++){
				//System.out.println(chkValue[chkValue.length-1]);
				map.put("pro_id",pro_id);
				map.put("pro_loginID",pro_loginID);
				//map.put("projectGubun",Integer.parseInt(chkValue[chkValue.length-1]));
		//}
		try{
			projectService.mplist_SC_insert(map);
			//등록후 list 페이지로 이동
			mv.setViewName("mplist_SC_insertOK");
		}catch (SQLException e) {//SQL에러시
			System.out.println(e.getMessage());
			mv.setViewName("failResultJsp");
		}
		return mv;
	}
}